from typing import Union, Optional

from fastapi import Query
from pydantic import BaseModel, Field

from like.schema_base import EmptyStrToNone


class MedicalDipGeneralDiseaseTypesListIn(BaseModel):
    """存储 DIP 综合病种相关信息的列表参数"""
    id: Union[int, None, EmptyStrToNone] = Query()  # 主键 ID，用于唯一标识每条记录
    dip_group_code: Union[str, None, EmptyStrToNone] = Query()  # DIP 分组编码，用于标识不同的 DIP 分组
    diagnosis_code: Union[str, None, EmptyStrToNone] = Query()  # 诊断编码，用于准确标识疾病诊断
    diagnosis_name: Union[str, None, EmptyStrToNone] = Query()  # 诊断名称，即疾病的具体名称
    operation_code_adjustment: Union[str, None, EmptyStrToNone] = Query()  # 操作编码调整，对操作编码进行的调整信息
    operation_name: Union[str, None, EmptyStrToNone] = Query()  # 操作名称，具体的医疗操作名称
    disease_type: Union[str, None, EmptyStrToNone] = Query()  # 病种类型，区分不同的病种类别
    disease_score: Union[str, None, EmptyStrToNone] = Query()  # 病种分值，该病种对应的分值
    average_cost: Union[str, None, EmptyStrToNone] = Query()  # 均次费用，该类病种的平均费用


class MedicalDipGeneralDiseaseTypesExportIn(MedicalDipGeneralDiseaseTypesListIn):  
    """存储 DIP 综合病种相关信息的导出参数"""
    export: Union[int, None] = Query()  # 导出模式
    page_start: Optional[int] = None    # 导出起始页
    page_end: Optional[int] = None      # 导出结束页
    page_size: int = Query()            # 每页数量
    file_name: Optional[str] = None     # 导出文件名    


class MedicalDipGeneralDiseaseTypesDetailIn(BaseModel):
    """存储 DIP 综合病种相关信息的详情参数"""
    id: int = Query(gt=0)  # 主键 ID，用于唯一标识每条记录


class MedicalDipGeneralDiseaseTypesAddIn(BaseModel):
    """存储 DIP 综合病种相关信息的新增参数"""
    dip_group_code: str  # DIP 分组编码，用于标识不同的 DIP 分组
    diagnosis_code: str  # 诊断编码，用于准确标识疾病诊断
    diagnosis_name: str  # 诊断名称，即疾病的具体名称
    operation_code_adjustment: str  # 操作编码调整，对操作编码进行的调整信息
    operation_name: str  # 操作名称，具体的医疗操作名称
    disease_type: str  # 病种类型，区分不同的病种类别
    disease_score: str  # 病种分值，该病种对应的分值
    average_cost: str  # 均次费用，该类病种的平均费用


class MedicalDipGeneralDiseaseTypesEditIn(BaseModel):
    """存储 DIP 综合病种相关信息的编辑参数"""
    dip_group_code: str  # DIP 分组编码，用于标识不同的 DIP 分组
    diagnosis_code: str  # 诊断编码，用于准确标识疾病诊断
    diagnosis_name: str  # 诊断名称，即疾病的具体名称
    operation_code_adjustment: str  # 操作编码调整，对操作编码进行的调整信息
    operation_name: str  # 操作名称，具体的医疗操作名称
    disease_type: str  # 病种类型，区分不同的病种类别
    disease_score: str  # 病种分值，该病种对应的分值
    average_cost: str  # 均次费用，该类病种的平均费用


class MedicalDipGeneralDiseaseTypesDelIn(BaseModel):
    """存储 DIP 综合病种相关信息的删除参数"""
    id: int = Field(gt=0)  # 主键 ID，用于唯一标识每条记录


class MedicalDipGeneralDiseaseTypesOut(BaseModel):
    """存储 DIP 综合病种相关信息的返回信息"""
    id: Optional[int]  # 主键 ID，用于唯一标识每条记录
    dip_group_code: str  # DIP 分组编码，用于标识不同的 DIP 分组
    diagnosis_code: str  # 诊断编码，用于准确标识疾病诊断
    diagnosis_name: str  # 诊断名称，即疾病的具体名称
    operation_code_adjustment: str  # 操作编码调整，对操作编码进行的调整信息
    operation_name: str  # 操作名称，具体的医疗操作名称
    disease_type: str  # 病种类型，区分不同的病种类别
    disease_score: str  # 病种分值，该病种对应的分值
    average_cost: str  # 均次费用，该类病种的平均费用

    class Config:
        orm_mode = True
